package day5;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;

//b.有一个单词txt文件 里面存放了很多单词
// 通过空格相连, 请通过线程
//IO流读取里面的内容,并且统计 每个单词出
// 现的次数 并且按照 次数从大到小排列
public class Work2 {
    public static void main(String[] args) throws IOException {
        //字节流  字符流
        //输入流  输出流
        //节点流  处理流(缓冲流)
        FileReader fr=new FileReader("./javaSE/src/day5/string.txt");
        BufferedReader br=new BufferedReader(fr);
        StringBuilder sb=new StringBuilder();
        String str=null;
        while((str=br.readLine())!=null){
            sb.append(str);
        }
        System.out.println(sb);
        //关闭流省略...
        //stringbuilder转换字符串  在通过空格隔开  进行分割
        String[] strs=sb.toString().split(" ");
        //统计 单词（key）  次数(value)
        Map<String,Integer> map=new HashMap<>();
        //思路: 遍历每隔数组每隔单词 查找map中是否存在
        //存在了 次数 +1  不存在 次数=1
        for(String s:strs){
            if(map.containsKey(s)){ //存在了 次数 +1
                map.put(s, map.get(s)+1);
            }else{ //不存在 次数=1
                map.put(s,1);
            }
        }
        //如何排序
        //map集合中的key和value  统称可以叫entry
        //map通过entrySet()
        // 可以把map集合每组键值队 都封装成entry对象返回
        Set<Map.Entry<String,Integer>> set=map.entrySet();
        //Set==>list
        List<Map.Entry<String,Integer>> list=new ArrayList<>(set);
        Collections.sort(list,(o1,o2)-> o2.getValue()-o1.getValue());
        System.out.println(list);
    }
}
